package com.kunbo.cn.util.json;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class Json {

	
	public static String oldSpareTansferOrderInf(Object object)
	{
		Gson gson = new GsonBuilder()  
		//.excludeFieldsWithoutExposeAnnotation() 						//不导出实体中没有用@Expose注解的属性  
		.enableComplexMapKeySerialization() 							//支持Map的key为复杂对象的形式  
		.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")		//时间转化为特定格式    
		//.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)		//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.  
		.setPrettyPrinting() 											//对json结果格式化.  
		//.setVersion(1.0)    											//有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.  
																		//@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么  
																		//@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.  
		.create();  
		String str = gson.toJson(object);
		
		
		return str;
	}
	public static String toJson(Object object)
	{
		Gson gson = new GsonBuilder()  
		//.excludeFieldsWithoutExposeAnnotation() 						//不导出实体中没有用@Expose注解的属性  
		.enableComplexMapKeySerialization() 							//支持Map的key为复杂对象的形式  
		.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")		//时间转化为特定格式    
		//.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)		//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.  
		//.setPrettyPrinting() 											//对json结果格式化.  
		//.setVersion(1.0)    											//有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.  
																		//@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么  
																		//@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.  
		.create();  
		String str = gson.toJson(object);
		return str;
	}
	public static Object toObject(Class c ,String json)
	{
		Gson gson = new Gson();
	    Object res = gson.fromJson(json, c);
	    return res;
	}
		
	
	public static String toJsonByPretty(Object object)
	{
		Gson gson = new GsonBuilder()  
		//.excludeFieldsWithoutExposeAnnotation() 						//涓嶅鍑哄疄浣撲腑娌℃湁鐢ˊExpose娉ㄨВ鐨勫睘鎬�  
		.enableComplexMapKeySerialization() 							//鏀寔Map鐨刱ey涓哄鏉傚璞＄殑褰㈠紡  
		.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")		//鏃堕棿杞寲涓虹壒瀹氭牸寮�    
		//.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)		//浼氭妸瀛楁棣栧瓧姣嶅ぇ鍐�,娉�:瀵逛簬瀹炰綋涓婁娇鐢ㄤ簡@SerializedName娉ㄨВ鐨勪笉浼氱敓鏁�.  
		.setPrettyPrinting() 											//瀵筳son缁撴灉鏍煎紡鍖�.  
		//.setVersion(1.0)    											//鏈夌殑瀛楁涓嶆槸涓�寮�濮嬪氨鏈夌殑,浼氶殢鐫�鐗堟湰鐨勫崌绾ф坊鍔犺繘鏉�,閭ｄ箞鍦ㄨ繘琛屽簭鍒楀寲鍜岃繑搴忓垪鍖栫殑鏃跺�欏氨浼氭牴鎹増鏈彿鏉ラ�夋嫨鏄惁瑕佸簭鍒楀寲.  
																		//@Since(鐗堟湰鍙�)鑳藉畬缇庡湴瀹炵幇杩欎釜鍔熻兘.杩樼殑瀛楁鍙兘,闅忕潃鐗堟湰鐨勫崌绾ц�屽垹闄�,閭ｄ箞  
																		//@Until(鐗堟湰鍙�)涔熻兘瀹炵幇杩欎釜鍔熻兘,GsonBuilder.setVersion(double)鏂规硶闇�瑕佽皟鐢�.  
		.create();  
		String str = gson.toJson(object);
		
		
		return str;
	}
	
	
	 //使用Gson进行解析Bean
    public static <T> T getBean(String jsonString, Class<T> cls) {
        T t = null;
        try {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        } catch (Exception e) {
            // TODO: handle exception
        }
        return t;
    }

    // 使用Gson进行解析 List<Beans>
    public static <T> List<T> getBeans(String jsonString, Class<T> cls) {
        List<T> list = new ArrayList<T>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
            }.getType());
        } catch (Exception e) {
        }
        return list;
    }

	
}
